package src;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author usuario_local
 */
public class ListaMensajes {

    private static String monitor = "Monitor";

     // Constructora tipo singleton
    static private ListaMensajes lm = null;

    private ListaMensajes() {
        // Importante, crear la lista con un usuario admin por defecto
        lm_lista = new ArrayList();
        lm_total = 0;
        // Creamos el usuario admin y le damos permisos
        String texto = "Este es un mensaje de bienvenida!!";
        Mensaje m = new Mensaje(texto,new Usuario("Prueba",""));
        
        // Lo añadimos a la lista
        lm_lista.add(m);
        this.setTotal();
    }

    static public ListaMensajes getListaMensajes() {

        synchronized(monitor){
            if (lm == null) {
            lm = new ListaMensajes();
            }
        }
        return lm;
    }

    // Atributos
    private ArrayList<Mensaje> lm_lista;
    private int lm_total;

    // Métodos
    public ArrayList<Mensaje> getLista(){ return lm_lista; }
    public int getTotal(){ return lm_total; }

    // Metodos auxiliares
    public void ordenar(){        
        Collections.sort(this.lm_lista);
    }

    private void setTotal() {
        lm_total = lm_lista.size();
    }

    // Metodos propios de la lista: Insertar, Borrar, etc
    public int insertarMensaje(Mensaje m){
        // Comprobamos que el usuario no esté duplicado
        try{
            lm_lista.add(m);
            return 0;
        }
        catch(Exception e){
            return 1;
        }      
    }

    // Los vamos a buscar de manera ineficiente...la tradicional
    public Mensaje getMensaje(int id){
        boolean encontrado = false;
        Iterator<Mensaje> itr = this.lm_lista.iterator();
        while (itr.hasNext() && !encontrado) {
            Mensaje m = itr.next();
            if (m.getID() == id){
                encontrado = true;
                // Lo borramos
                return m;
            }
        }
        return null;
    }

    public int borrarMensaje(int id){
        // Buscamos el mensaje, si esta lo borramos
        boolean encontrado = false;
        Iterator<Mensaje> itr = this.lm_lista.iterator();
        while (itr.hasNext() && !encontrado) {
            Mensaje m = itr.next();
            if (m.getID() == id){
                encontrado = true;
                // Lo borramos
                this.lm_lista.remove(m);
                return 0;
            }
        }
        return -1;
    }

}
